﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.actdocpago;
using com.clinica.business.BE.comun;
using com.clinica.business.BL.interfaces.actdocpago;
using com.clinica.DL.sql.actdocpago;
using com.clinica.DL.sql.comun;
using com.clinica.business.entities;
using System.Configuration;
/****************************************************************************************
 * Sistema    : Sistema de Gestión de Clinica
 * Modulo     : Facturación y Presupuestos
 * Descripción: 
 * Autor      : JPEREZ
 * Fecha      : 2011-06-01
 ****************************************************************************************/

namespace com.clinica.business.BL.actdocpago
{
    [ServiceBehavior(Name = "DocumentoPagoBL",
  Namespace = "http://com.clinica.business.BL.interfaces.actdocpago",
  ConcurrencyMode = ConcurrencyMode.Multiple,
  InstanceContextMode = InstanceContextMode.PerSession,
  IncludeExceptionDetailInFaults = true)]
    public class DocumentoPagoBL : IDocumentoPagoBL
    {
        #region IDocumentoPagoBL Members

        public List<DocumentoPagoBE> ObternerDocumentosPago(DocumentoPagoBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<DocumentoPagoBE> lstLiquidaciones = new List<DocumentoPagoBE>();
            try
            {
                lstLiquidaciones = DocumentoPagoDL.ObtenerDocumentoPago(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (DocumentoPagoBE item in lstLiquidaciones)
                {
                    if (item.FechaEmision != null)
                        item.FechaEmisionVista = item.FechaEmision.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstLiquidaciones;
        }

        public int ActualizarDocumentoPago(int Accion,DocumentoPagoBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int NumDoc=0;
            List<DocumentoPagoBE> lst = new List<DocumentoPagoBE>();
            try
            {
                lst = DocumentoPagoDL.ActualizarDocumentoPago(Accion,request);
                foreach (DocumentoPagoBE item in lst)
                {
                    NumDoc = item.Numero;
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return NumDoc;
        }

        public List<DocumentoPagoBE> ObtenerDocumentoPago(DocumentoPagoBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<DocumentoPagoBE> lstLiquidaciones = new List<DocumentoPagoBE>();
            try
            {
                lstLiquidaciones = DocumentoPagoDL.ObtenerDocumentoPago(request);
                foreach (DocumentoPagoBE item in lstLiquidaciones)
                {
                    if (item.FechaEmision != null)
                        item.FechaEmisionVista = item.FechaEmision.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstLiquidaciones;
        }

        #endregion

        #region IDocumentoPagoBL Members


        public List<com.clinica.business.BE.comun.ParametrosBE> ObternerTipoDocumento(com.clinica.business.BE.comun.ParametrosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ParametrosBE> lstResult = new List<ParametrosBE>();
            try
            {
                lstResult = ParametrosDL.ObtenerTabla(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstResult;
        }

        #endregion

        #region IDocumentoPagoBL Members


        public List<DocumentoPagoBE> ObternerConsumos(DocumentoPagoBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<DocumentoPagoBE> lstLiquidaciones = new List<DocumentoPagoBE>();
            try
            {
                lstLiquidaciones = DocumentoPagoDL.ObtenerConsumos(request);
                foreach (DocumentoPagoBE item in lstLiquidaciones)
                {
                    if (item.FechaEmision != null)
                        item.FechaLiqVista = item.FechaLiq.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstLiquidaciones;
        }
        public List<DocumentoPagoBE> ObternerLiquidacion(DocumentoPagoBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<DocumentoPagoBE> lstLiquidaciones = new List<DocumentoPagoBE>();
            try
            {
                decimal decTotPrecio = 0;
                decimal decTotDescuento = 0;
                decimal decTotIgv = 0;
                decimal decTotNeto = 0;
                decimal decPorcIGV = 0;
                ParametrosBE oparm = new ParametrosBE();
                List<ParametrosBE> lstParm = new List<ParametrosBE>();
                lstLiquidaciones = DocumentoPagoDL.ObtenerLiquidacion(request);   
                oparm.NombreTabla = "MONIGV";
                lstParm = ParametrosDL.ObtenerTabla(oparm);
                if (lstParm.Count >= 0)
                    try
                    {
                        decPorcIGV = decimal.Parse(lstParm[0].DescripcionCorta.Trim()) / decimal.Parse("100");
                    }
                    catch (Exception)
                    {
                        decPorcIGV = decimal.Parse(ConfigurationManager.AppSettings.Get("IGV"));
                    }
                foreach (DocumentoPagoBE item in lstLiquidaciones)
                {                   
                    decTotPrecio = decTotPrecio + item.Precio;
                    decTotDescuento = decTotDescuento + item.Descuento;
                }
                decTotIgv = (decTotPrecio - decTotDescuento) * decPorcIGV;
                decTotNeto = decTotPrecio - decTotDescuento + decTotIgv;
                foreach (DocumentoPagoBE item2 in lstLiquidaciones)
                {
                    item2.ImporteBruto = (decTotPrecio - decTotDescuento);
                    item2.ImporteNeto = decTotNeto;
                    item2.Igv = decTotIgv;
                }
       
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstLiquidaciones;
        }

        #endregion
    }
}
